﻿using System;
using System.Data;
using System.Linq;
using System.Windows.Forms;

namespace Siav
{
    public partial class frmFornecedores : Form
    {
        public frmFornecedores()
        {
            InitializeComponent();
        }
        SiavEntities Entidades = new SiavEntities();

        private void CarregaEstados()
        {
            var Estados = (from Est in Entidades.UnidadesDaFederacao
                           orderby Est.NomeUF
                           select Est).ToList();
            cboEstado.DataSource = Estados;
            cboEstado.DisplayMember = "NomeUF";
            cboEstado.ValueMember = "SiglaUF";
        }

        private void CarregaCidades(string pCodigoEstado)
        {
            var TCidades = (from tr in Entidades.MunicipiosIBGE
                            where tr.SiglaUF.Equals(pCodigoEstado)
                            select tr).ToList();
            cboCidade.DataSource = TCidades;
            cboCidade.DisplayMember = "NomeMunicipio";
            cboCidade.ValueMember = "Municipio";
        }
        private bool SalvarDados()
        {
            try
            {
                if (tCodigo.Text == "")
                {
                Fornecedores Fo = new Fornecedores();
                Fo.RazaoSocial = tNomeRazao.Text;
                Fo.NomeFantasia = tNomeFantasia.Text;
                Fo.CNPJ = tCNPJCPF.Text;
                Fo.IE = tIE.Text;
                Fo.Telefone = tTelefone.Text;
                Fo.Fax = tFax.Text;
                Fo.Contato = tContato.Text;
                Fo.CEP = tCEP.Text;
                Fo.Logradouro = tLogradouro.Text;
                Fo.Bairro = tBairro.Text;
                Fo.Numero = tNumero.Text;
                var eSelecionado = cboEstado.SelectedValue.ToString();
                var Estados = Entidades.UnidadesDaFederacao.FirstOrDefault(est => est.SiglaUF.Equals(eSelecionado));
                Fo.Estado = Estados.CodigoUF;
                Fo.Cidade = int.Parse(cboCidade.SelectedValue.ToString());
                Fo.DataCadastro = DateTime.Now;
                Fo.Observacoes = tObservacoes.Text;

                    Entidades.AddObject("Fornecedores", Fo);
                    Entidades.SaveChanges();
                    return true;
                }
                else
                {
                    int CodigoFor = int.Parse(tCodigo.Text);
                    var FoRR = Entidades.Fornecedores.FirstOrDefault(forn => forn.Codigo.Equals(CodigoFor));
                    FoRR.RazaoSocial = tNomeRazao.Text;
                    FoRR.NomeFantasia = tNomeFantasia.Text;
                    FoRR.CNPJ = tCNPJCPF.Text;
                    FoRR.IE = tIE.Text;
                    FoRR.Telefone = tTelefone.Text;
                    FoRR.Fax = tFax.Text;
                    FoRR.Contato = tContato.Text;
                    FoRR.CEP = tCEP.Text;
                    FoRR.Logradouro = tLogradouro.Text;
                    FoRR.Bairro = tBairro.Text;
                    FoRR.Numero = tNumero.Text;
                    var esSelecionado = cboEstado.SelectedValue.ToString();
                    var vEstados = Entidades.UnidadesDaFederacao.FirstOrDefault(est => est.SiglaUF.Equals(esSelecionado));
                    FoRR.Estado = vEstados.CodigoUF;
                    FoRR.Cidade = int.Parse(cboCidade.SelectedValue.ToString());
                    FoRR.DataCadastro = DateTime.Now;
                    FoRR.Observacoes = tObservacoes.Text;
                    Entidades.ObjectStateManager.ChangeObjectState(FoRR, EntityState.Modified);
                    Entidades.SaveChanges();
                    return true;
                }
            }
            catch
            {
                return false;
            }

        }

        private void CarregarDadosFornecedor(string Codigo)
        {

            int CodigoInformado = int.Parse(Codigo);
            if (CodigoInformado != -1)
            {
                var Frr = Entidades.Fornecedores.FirstOrDefault(fo => fo.Codigo.Equals(CodigoInformado));
                tCodigo.Text = Frr.Codigo.ToString();
                tNomeRazao.Text = Frr.RazaoSocial;
                tNomeFantasia.Text = Frr.NomeFantasia;
                tCNPJCPF.Text = Frr.CNPJ;
                tIE.Text = Frr.IE;
                tTelefone.Text = Frr.Telefone;
                tFax.Text = Frr.Fax;
                tContato.Text = Frr.Contato;
                tCEP.Text = Frr.CEP;
                tLogradouro.Text = Frr.Logradouro;
                tBairro.Text = Frr.Bairro;
                tNumero.Text = Frr.Numero;
                var CodigoEstado = Frr.Estado;
                var Estado = Entidades.UnidadesDaFederacao.FirstOrDefault(e => e.CodigoUF == CodigoEstado );
                cboEstado.SelectedValue = Estado.SiglaUF;
                cboCidade.SelectedValue = Frr.Cidade;
                tObservacoes.Text = Frr.Observacoes;
                tDataCadastro.Text = Frr.DataCadastro.ToString();
            }
        }

        private void frmFornecedores_Load(object sender, EventArgs e)
        {
            CarregaEstados();
            tDataCadastro.Text = DateTime.Now.ToShortDateString();
            cboEstado.SelectedValue = "MT";
            cboCidade.SelectedValue = 5103403;
        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            Validacoes.LimpaCamposFormulario(this.Controls);
        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            if (SalvarDados() == true)
            {
                MessageBox.Show("Fornecedor Cadastrado / Atualizado com sucesso", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("Erro ao Cadastrar / Atualizar os dados", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            frmPesquisaFornecedores PesqFor = new frmPesquisaFornecedores();
            PesqFor.ShowDialog();
            CarregarDadosFornecedor(PesqFor.CodigoSelecionado);
        }

        private void btnSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void cboEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            var estado = cboEstado.SelectedValue.ToString();
            CarregaCidades(estado);
        }

        private void tCNPJCPF_Leave(object sender, EventArgs e)
        {
            if (tCNPJCPF.TextLength == 11)
            {
                var vValidacao = Validacoes.ValidarDvCpf(tCNPJCPF.Text);
                if (vValidacao == false)
                {
                    MessageBox.Show("Erro, CPF inválido", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            if (tCNPJCPF.TextLength == 14)
            {
                var vValidacao = Validacoes.ValidaDvCnpj(tCNPJCPF.Text);
                if (vValidacao == false)
                {
                    MessageBox.Show("Erro, CNPJ inválido", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void txtFiltroTransp_TextChanged(object sender, EventArgs e)
        {

        }

    }
}
